package collection.stream;

import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
import java.util.Random;

/**
 *
 */
public class StreamApiDemo2 {
    public static void main(String[] args) {
        List<Integer> list = new ArrayList<>();
        Random rand = new Random();
        for(int i=0; i<10; i++){
            list.add(rand.nextInt(100));//0-99的随机数
        }
        System.out.println(list);

        /*
            常见的终端操作:
            1.min: 用于获取流中的最小值
            2.max: 用于获取流中的最大值
            3.anyMatch: 用于判断流中是否存在符合lambda表达式要求的元素
            4.allMatch: 用于判断流中是否全部符合lambda表达式的要求
            5.noneMatch: 用于判断流中是否没有符合lambda表达式要求的元素
            7.reduce: 用于将流中的元素进行聚合累加操作

            Optional, 类似于包装类, 内部保存了一个值, 通过get方法可以获取Optional中的值
         */

        //获取流中的最小值
        Optional<Integer> value = list.stream().min((e1,e2)->e1-e2);
        System.out.println(value.get());

        //获取流中的最大值
        value = list.stream().max((e1,e2)->e1-e2);
        System.out.println(value.get());

        //判断流中是否存在偶数
        boolean anyMatch = list.stream().anyMatch(e-> e%2==0);
        System.out.println(anyMatch);//true
        //判断流中是否全部为偶数
        boolean allMatch = list.stream().allMatch(e-> e%2==0);
        System.out.println(allMatch);//false
        //判断流中是否没有偶数
        boolean noneMatch = list.stream().noneMatch(e-> e%2==0);
        System.out.println(noneMatch);//false

        //对集合元素求和(累加所有集合元素)
        int number = list.stream().reduce((e1,e2)->e1+e2).get();
        System.out.println(number);
    }
}



